home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
New Star Software Collection
/
NSS_Collection.iso
/
3-252 picture publisher 50
/
1.ima
/
SETUPAPI.IN_
/
SETUPAPI.bin
Wrap
Text File
|
1994-08-30
|
39KB
|
1,209 lines
'**************************************************************************
'******************************* Windows API's **************************
'**************************************************************************
GLOBAL hSetup AS INTEGER
GLOBAL fFrameInit AS INTEGER
GLOBAL fInstallInit AS INTEGER
CONST SM_CXSCREEN = 0
CONST SM_CYSCREEN = 1
CONST WF_80x87 = 1024
CONST WF_CPU186 = 128
CONST WF_CPU286 = 2
CONST WF_CPU386 = 4
CONST WF_CPU486 = 8
CONST WF_STANDARD = 16
CONST WF_ENHANCED = 32
'' DoMsgBox Flags
CONST MB_OK = 0
CONST MB_ICONHAND = 16
CONST MB_TASKMODAL = 8192
DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
DECLARE FUNCTION SetWindowPos LIB "user" (hWnd%, hWndAfter%, x%, y%, cx%, cy%, fuFlags%) AS INTEGER
'**************************************************************************
'****************************** Setup Constants ***************************
'**************************************************************************
''Command Option Flags
CONST cmoVital = 1
CONST cmoCopy = 2
CONST cmoUndo = 4
CONST cmoRoot = 8
CONST cmoDecompress = 16
CONST cmoTimeStamp = 32
CONST cmoReadOnly = 64
CONST cmoBackup = 128
CONST cmoForce = 256
CONST cmoRemove = 512
CONST cmoOverwrite = 1024
CONST cmoAppend = 2048
CONST cmoPrepend = 4096
CONST cmoNone = 0
CONST cmoAll = 65535
''File Exist Modes
CONST femExists = 0
CONST femRead = 1
CONST femWrite = 2
CONST femReadWrite = 3
''Read-Only Return Code
CONST ynrcNo = 0
CONST ynrcYes = 1
CONST ynrcErr1 = 2
CONST ynrcErr2 = 3
CONST ynrcErr3 = 4
CONST ynrcErr4 = 5
CONST ynrcErr5 = 6
CONST ynrcErr6 = 7
CONST ynrcErr7 = 8
CONST ynrcErr8 = 9
CONST ynrcErr9 = 10
''General Return Codes
CONST grcOkay = 0
CONST grcNotOkay = 1
CONST grcUserQuit = 48
''Ranges
''CONST cbSymValMax = 8192
CONST cbSymValMax = 512
''REVIEW: symbol table will allow strings up to 8192 bytes
'' but we get Out of String Space wattdrvr error if we alloc
'' STRING$() that big. (See GetSymbolValue and GetListItem)
'' We should look into using dynamic far alloc instead of
'' STRING$ for large buffers.
'' NOTE: 8192 works okay with runtime wattdrvr, however.
''ON ERROR Error Codes
CONST STFERR = 1024 ''setup system error
CONST STFQUIT = 1025 ''user quit
CONST scmOff = 0
CONST scmOnIgnore = 1
CONST scmOnFatal = 2
'**************************************************************************
'******************************** Setup API's ***************************
'**************************************************************************
'' common
DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
DECLARE FUNCTION FRestoreCursor LIB "msshlstf.dll" (hPrev%) AS INTEGER
DECLARE FUNCTION FOpenLogFile LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
DECLARE FUNCTION FCloseLogFile LIB "mscomstf.dll" AS INTEGER
DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
''shell
DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
''shell
DECLARE SUB MaximizeFrame
DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
''install
DECLARE SUB ProSetPos LIB "msinsstf.dll" (x%, y%)
DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
DECLARE SUB ResetCopyList LIB "msinsstf.dll"
DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
'*************************************************************************
'**************** Setup Basic Wrapper Declarations *********************
'*************************************************************************
''shell
DECLARE SUB SetBitmap(szDll$, Bitmap%)
DECLARE SUB SetAbout(szAbout1$, szAbout2$)
DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
DECLARE SUB UIPop (n%)
DECLARE SUB UIPopAll
DECLARE SUB SetTitle (sz$)
DECLARE SUB ReadInfFile (szFile$)
DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
DECLARE SUB RemoveSymbol (szSym$)
DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
DECLARE SUB AddListItem(szSymbol$, szItem$)
DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
DECLARE FUNCTION ShowWaitCursor AS INTEGER
DECLARE SUB RestoreCursor (hPrev%)
DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
''install
DECLARE SUB CreateDir (szDir$, cmo%)
DECLARE SUB RemoveDir (szDir$, cmo%)
DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
DECLARE SUB CopyFilesInCopyList
DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
DECLARE SUB DumpCopyList (szFile$)
DECLARE SUB ClearCopyList
DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
DECLARE SUB BackupFile (szFullPath$, szBackup$)
DECLARE SUB RenameFile (szFullPath$, szBackup$)
DECLARE SUB InitInstall
DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
DECLARE SUB ClearBillboardList
DECLARE SUB SetCopyGaugePosition (x%, y%)
DECLARE SUB SetRestartDir(szDir$)
DECLARE FUNCTION RestartListEmpty AS INTEGER
DECLARE FUNCTION ExitExecRestart AS INTEGER
DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
'' Error Handling
'$ifdef DEBUG
'' Setup API Errors
CONST saeFail = 0
CONST saeInit = 1
CONST saeNYI = 3
CONST saeArg = 4 ''must be max sae value
DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
'' chk arg
DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
'$endif ''DEBUG
'' Windows system detect
DECLARE FUNCTION GetWindowsDir AS STRING
DECLARE FUNCTION GetWindowsSysDir AS STRING
DECLARE FUNCTION IsWindowsShared AS INTEGER
'*************************************************************************
'***************** Setup Basic Wrapper Definitions *********************
'*************************************************************************
FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
fFrameInit = 0
fInstallInit = 0
IF hSetup > 0 THEN
'$ifdef DEBUG
StfApiErr saeInit, "InitSetup", szCmdLine$
'$endif ''DEBUG
END IF
i% = InitFrame(szCmdLine$)
fFrameInit = 1
InitInstall
fInstallInit = 1
InitSetup = i%
END FUNCTION
'*************************************************************************
SUB UIPopAll STATIC
IF FKillNDialogs(65535) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "UIPopAll", ""
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'**************************************************************************
FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
IF hSetup > 0 THEN
'$ifdef DEBUG
StfApiErr saeInit, "InitFrame", szCmdLine$
'$endif ''DEBUG
ELSE
i% = InitializeFrame(szCmdLine$)
IF i% = -1 THEN
END '' NOT an error - Usage (/?) or Command line copy operation
ELSEIF i% = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "InitFrame", szCmdLine$
'$endif ''DEBUG
END
ELSE
InitFrame = i%
END IF
END IF
END FUNCTION
'**************************************************************************
SUB SetBitmap(szDll$, Bitmap%) STATIC
IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'**************************************************************************
'*************************************************************************
SUB SetTitle(sz$) STATIC
SetWindowText HwndFrame(), sz$
END SUB
'*************************************************************************
SUB ReadInfFile (szFile$) STATIC
'$ifdef DEBUG
if FValidFATPath(szFile$) = 0 then
BadArgErr 1, "ReadInfFile", szFile$
end if
IF FOpenInf(szFile$, 1, 1) = 0 THEN
StfApiErr saeFail, "ReadInfFile", szFile$
'$else ''!DEBUG
IF FOpenInf(szFile$, 1, 0) = 0 THEN
'$endif ''!DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
'$ifdef DEBUG
if szDll$ = "" then
n% = 1
elseif szDlgProc$ = "" then
n% = 3
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
end if
'$endif ''DEBUG
IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
'$endif ''DEBUG
ERROR STFERR
ELSE
UIStartDlg = GetSymbolValue("DLGEVENT")
END IF
END FUNCTION
'*************************************************************************
SUB UIPop (n%) STATIC
IF FKillNDialogs(n%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "UIPop", STR$(n%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
SetBeepingMode = FSetBeepingMode(mode%)
END FUNCTION
'*************************************************************************
FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "GetSymbolValue", szSymbol$
end if
'$endif ''DEBUG
szValue$ = string$(cbSymValMax,128)
Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
GetSymbolValue = szValue$
IF Length% >= cbSymValMax THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
IF szSymbol$ = "" THEN
ERROR STFERR
END IF
szValue$ = ""
END FUNCTION
'*************************************************************************
FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "GetListLength", szSymbol$
end if
'$endif ''DEBUG
GetListLength = UsGetListLength(szSymbol$)
IF szSymbol$ = "" THEN
ERROR STFERR
END IF
END FUNCTION
'*************************************************************************
FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
'$ifdef DEBUG
if szListSymbol$ = "" then
BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
end if
if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
end if
'$endif ''DEBUG
szListItem$ = string$(cbSymValMax,32)
Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
GetListItem = szListItem$
IF Length% >= cbSymValMax THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
IF szListSymbol$ = "" THEN
ERROR STFERR
END IF
if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
ERROR STFERR
end if
szListItem$ = ""
END FUNCTION
'*************************************************************************
SUB AddListItem(szSymbol$, szItem$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
end if
'$endif ''DEBUG
IF FAddListItem(szSymbol$, szItem$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
nArg% = 1
elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
nArg% = 2
else
nArg% = 0
end if
if nArg% > 0 then
BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
end if
'$endif ''DEBUG
IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'**************************************************************************
SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
n% = 1
elseif FValidInfSect(szSect$) = 0 then
n% = 2
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
end if
'$endif ''DEBUG
IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB SetSymbolValue(szSymbol$, szValue$) STATIC
'$ifdef DEBUG
if szSymbol$ = "" then
BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
end if
'$endif ''DEBUG
IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB RemoveSymbol(szSym$) STATIC
'$ifdef DEBUG
if szSym$ = "" then
BadArgErr 1, "RemoveSymbol", szSym$
end if
'$endif ''DEBUG
IF FRemoveSymbol(szSym$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "RemoveSymbol", szSym$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION ShowWaitCursor STATIC AS INTEGER
ShowWaitCursor = HShowWaitCursor
END FUNCTION
'*************************************************************************
SUB RestoreCursor (hPrev%) STATIC
i% = FRestoreCursor(hPrev%)
IF i% = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "RestoreCursor", ""
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB InitInstall STATIC
IF hSetup > 0 THEN
'$ifdef DEBUG
StfApiErr saeInit, "InitInstall", ""
'$endif ''DEBUG
ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "InitInstall", ""
'$endif ''DEBUG
END
END IF
END SUB
'*************************************************************************
SUB CreateDir (szDir$, cmo%) STATIC
'$ifdef DEBUG
if FValidFATDir(szDir$) = 0 then
BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateDir(szDir$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
'$ifdef DEBUG
if FValidIniFile(szFile$) = 0 then
n% = 1
elseif FValidInfSect(szSect$) = 0 then
n% = 2
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
'$ifdef DEBUG
if FValidIniFile(szFile$) = 0 then
n% = 1
elseif FValidInfSect(szSect$) = 0 then
n% = 2
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
'$ifdef DEBUG
if FValidIniFile(szFile$) = 0 then
n% = 1
elseif FValidInfSect(szSect$) = 0 then
n% = 2
elseif szKey$ = "" then
n% = 3
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
'$ifdef DEBUG
if szGroup$ = "" or len(szGroup$) > 24 then
BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
'$ifdef DEBUG
if szGroup$ = "" or len(szGroup$) > 24 then
BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB DumpCopyList (szFile$) STATIC
'$ifdef DEBUG
if szFile$ = "" then
BadArgErr 1, "DumpCopyList", szFile$
end if
'$endif ''DEBUG
IF FDumpCopyListToFile (szFile$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "DumpCopyList", szFile$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB ClearCopyList STATIC
ResetCopyList
END SUB
'*************************************************************************
FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
IF lNeed& < 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
'$endif ''DEBUG
ERROR STFERR
END IF
GetCopyListCost = lNeed&
END FUNCTION
'*************************************************************************
SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
szItemNew$ = szItem$
IF szOther$ <> "" THEN
szItemNew$ = szItem$ + "," + szOther$
END IF
'$ifdef DEBUG
if szGroup$ = "" or len(szGroup$) > 24 then
BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
szItemNew$ = ""
END SUB
'*************************************************************************
'*************************************************************************
SUB CopyFilesInCopyList STATIC
grc% = GrcCopyFilesInCopyList (HinstFrame())
IF grc% = grcUserQuit THEN
ERROR STFQUIT
ELSEIF grc% > 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CopyFilesInCopyList", ""
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
'$ifdef DEBUG
if FValidFATPath(szFullPathSrc$) = 0 then
n% = 1
elseif FValidFATPath(szFullPathDst$) = 0 then
n% = 2
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
end if
'$endif ''DEBUG
IF FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
'$ifdef DEBUG
if FValidFATPath(szFullPathSrc$) = 0 then
BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
end if
'$endif ''DEBUG
IF YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
'$ifdef DEBUG
StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB BackupFile (szFullPath$, szBackup$) STATIC
'$ifdef DEBUG
if FValidFATPath(szFullPath$) = 0 then
n% = 1
elseif szBackup$ = "" then
n% = 2
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
end if
'$endif ''DEBUG
IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
'$ifdef DEBUG
StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
'$ifdef DEBUG
if FValidInfSect(szSect$) = 0 then
n% = 1
elseif FValidFATDir(szSrc$) = 0 then
n% = 2
elseif FValidFATDir(szDest$) = 0 then
n% = 3
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
end if
'$endif ''DEBUG
IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
'$ifdef DEBUG
if FValidInfSect(szSect$) = 0 then
n% = 1
elseif szKey$ = "" then
n% = 2
elseif FValidFATDir(szSrc$) = 0 then
n% = 3
elseif FValidFATDir(szDest$) = 0 then
n% = 4
else
n% = 0
end if
if n% > 0 then
BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
end if
'$endif ''DEBUG
IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
'*************************************************************************
SUB SetCopyGaugePosition (x%, y%) STATIC
ProSetPos x%, y%
END SUB
'*************************************************************************
SUB MaximizeFrame STATIC
cx% = GetSystemMetrics (SM_CXSCREEN)
cy% = GetSystemMetrics (SM_CYSCREEN)
hWnd% = HwndFrame
bResult% = SetWindowPos (hWnd%,0,0,0,cx%,cy%,20)
' if cx% > 640 THEN
' StfApiErr saeFail, "SetWindowPos", "> 640!"
' END IF
END SUB
'*************************************************************************
FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
IsDirWritable = FIsDirWritable(szDir$)
END FUNCTION
'*************************************************************************
FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
'$ifdef DEBUG
if FValidFATDir(szFile$) = 0 then
BadArgErr 1, "IsFileWritable", szFile$
end if
'$endif ''DEBUG
IsFileWritable = FIsFileWritable(szFile$)
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsDir STATIC AS STRING
szBuf$ = string$(256, 32)
cbBuf% = GetWindowsDirectory(szBuf$, 256)
IF cbBuf% = 0 THEN
GetWindowsDir = ""
'$ifdef DEBUG
StfApiErr saeFail, "GetWindowsDir", ""
'$endif ''DEBUG
ERROR STFERR
ELSE
IF cbBuf% > 255 THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
szBuf$ = RTRIM$(szBuf$)
IF MID$(szBuf$, 1, 1) = "\" THEN
'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
END IF
IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
szBuf$ = szBuf$ + "\"
END IF
GetWindowsDir = szBuf$
END IF
szBuf$ = ""
END FUNCTION
'*************************************************************************
FUNCTION GetWindowsSysDir STATIC AS STRING
szBuf$ = string$(256, 32)
cbBuf% = GetSystemDirectory(szBuf$, 256)
IF cbBuf% = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "GetWindowsSysDir", ""
'$endif ''DEBUG
ERROR STFERR
ELSE
IF cbBuf% > 255 THEN
res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
ERROR STFERR
END IF
szBuf$ = RTRIM$(szBuf$)
IF MID$(szBuf$, 1, 1) = "\" THEN
szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
END IF
IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
szBuf$ = szBuf$ + "\"
END IF
GetWindowsSysDir = szBuf$
END IF
szBuf$ = ""
END FUNCTION
'*************************************************************************
FUNCTION IsWindowsShared STATIC AS INTEGER
szWin$ = UCASE$(GetWindowsDir())
szSys$ = UCASE$(GetWindowsSysDir())
IF len(szWin$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "IsWindowsShared", ""
'$endif ''DEBUG
ERROR STFERR
END IF
IF len(szSys$) <= len(szWin$) THEN
IsWindowsShared = 1
ELSE
szSys$ = MID$(szSys$, 1, len(szWin$))
IF szWin$ = szSys$ THEN
IsWindowsShared = 0
ELSE
IsWindowsShared = 1
END IF
END IF
END FUNCTION
'*************************************************************************
'*************************************************************************
SUB SetRestartDir (szDir$) STATIC
'$ifdef DEBUG
if FValidFATDir(szDir$) = 0 then
BadArgErr 1, "SetRestartDir", szDir$
end if
'$endif ''DEBUG
IF FSetRestartDir(szDir$) = 0 THEN
'$ifdef DEBUG
StfApiErr saeFail, "SetRestartDir", szDir$
'$endif ''DEBUG
ERROR STFERR
END IF
END SUB
'*************************************************************************
FUNCTION RestartListEmpty STATIC AS INTEGER
IF FRestartListEmpty() = 0 THEN
RestartListEmpty = 0
ELSE
RestartListEmpty = 1
END IF
END FUNCTION
'*************************************************************************
FUNCTION ExitExecRestart STATIC AS INTEGER
ExitExecRestart = FExitExecRestart
END FUNCTION
'*************************************************************************
'**************************************************************************
'*************************** Error Handlers *****************************
'**************************************************************************
'$ifdef DEBUG
'**************************************************************************
SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC ''DEBUG only
select case nMsg%
case saeFail
lpText$ = "Failed"
case saeInit
lpText$ = "Already Initialized"
case saeNYI
lpText$ = "NYI"
case else
lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
end select
lpText$ = lpText$ + ": "+ szApi$
if szArgs$ <> "" then
lpText$ = lpText + " (" + szArgs$ + ")"
end if
lpCaption$ = "MS-Setup Toolkit API Error"
res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
print lpText$
lpText$ = ""
lpCaption$ = ""
END SUB
'**************************************************************************
SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC ''DEBUG only
StfApiErr nArg%+saeArg, szApi$, szArgs$
ERROR STFERR
END SUB
'** REVIEW: Move this function into common lib (we'll need it there too)
'**************************************************************************
FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
FValidInfSect = 0
else
FValidInfSect = 1
end if
END FUNCTION
'** REVIEW: Move this function into common lib (we'll need it there too)
'**************************************************************************
FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
FValidIniFile = 0
else
FValidIniFile = 1
end if
END FUNCTION
'**************************************************************************
FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
if szDrive$ = "" then
FValidDrive = 0
elseif INSTR(1,szDrive$,"\\") = 1 then ' UNC path
FValidDrive = 1
elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
FValidDrive = 0
elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
FValidDrive = 0
elseif LEN(szDrive$) = 1 then
FValidDrive = 1
elseif INSTR(2,szDrive$,":\") = 2 then
FValidDrive = 1
elseif INSTR(1,szDrive$,":") = 2 then
FValidDrive = 1
else
FValidDrive = 0
end if
END FUNCTION
'$endif ''DEBUG
TRAP CleanupTrap From "MSSHLSTF.DLL"
End Trap
hSetup = InitSetup(COMMAND$)
ON ERROR GOTO QUIT